/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package agb.Modelo;

import agb.Conexion.Conexion;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
//import org.apache.poi.hssf.util.HSSFColor.TEAL;


/**
 *
 * @author Alan Cabrera Abanto
 */
public class TemaSylabus implements Serializable{
    private String nombreTema, descripcionTema, fechaInicio, fechaFin, nombreCurso, nombreGrado, nombreNivel;
    private int codTema, codNivelGrado, codCurso;

    public String getNombreCurso() {
        return nombreCurso;
    }

    public void setNombreCurso(String nombreCurso) {
        this.nombreCurso = nombreCurso;
    }

    public String getNombreGrado() {
        return nombreGrado;
    }

    public void setNombreGrado(String nombreGrado) {
        this.nombreGrado = nombreGrado;
    }

    public String getNombreNivel() {
        return nombreNivel;
    }

    public void setNombreNivel(String nombreNivel) {
        this.nombreNivel = nombreNivel;
    }

    
    public int getCodCurso() {
        return codCurso;
    }

    public void setCodCurso(int codCurso) {
        this.codCurso = codCurso;
    }

    public int getCodNivelGrado() {
        return codNivelGrado;
    }

    public void setCodNivelGrado(int codNivelGrado) {
        this.codNivelGrado = codNivelGrado;
    }

    public int getCodTema() {
        return codTema;
    }

    public void setCodTema(int codTema) {
        this.codTema = codTema;
    }

    public String getDescripcionTema() {
        return descripcionTema;
    }

    public void setDescripcionTema(String descripcionTema) {
        this.descripcionTema = descripcionTema;
    }

    public String getFechaFin() {
        return fechaFin;
    }

    public void setFechaFin(String fechaFin) {
        this.fechaFin = fechaFin;
    }

    public String getFechaInicio() {
        return fechaInicio;
    }

    public void setFechaInicio(String fechaInicio) {
        this.fechaInicio = fechaInicio;
    }

    public String getNombreTema() {
        return nombreTema;
    }

    public void setNombreTema(String nombreTema) {
        this.nombreTema = nombreTema;
    }
    
     public boolean registraTema(TemaSylabus tema){
        boolean rpta = false;
        Connection cn = null;
        PreparedStatement ps = null;
        String sql = "INSERT INTO tema_silabus(cod_tema, cod_curso, cod_nivel_grado,nombre_tema, descripcion_tema, fechainicio_tema, fechafin_tema, estado_tema) "
                + "VALUES(nextval('tema_sylabus_seq'),?,?,?,?,to_date(?,'DD/MM/YYYY)'),to_date(?,'DD/MM/YYYY'),'A')" ;
        try{
            cn = Conexion.getConexion();
            cn.setAutoCommit(false);
            ps = cn.prepareStatement(sql);
            ps.setInt(1, tema.getCodCurso());
            ps.setInt(2, tema.getCodNivelGrado());
            ps.setString(3, tema.getNombreTema());
            ps.setString(4, tema.getDescripcionTema());
            ps.setString(5, tema.getFechaInicio());
            ps.setString(6, tema.getFechaFin());
            rpta = ps.executeUpdate()==1?true:false;
            if(rpta){
                Conexion.confirmarTransaccion(cn);
            }else{
                Conexion.anularTransaccion(cn);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return rpta;
    }
     
     public boolean eliminarTema(int codTema){
        boolean rpta = false;
        Connection cn = null;
        PreparedStatement ps = null;
        String sql = "DELETE FROM tema_silabus WHERE cod_tema = ? " ;
        try{
            cn = Conexion.getConexion();
            cn.setAutoCommit(false);
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codTema);
            rpta = ps.executeUpdate()==1?true:false;
            if(rpta){
                Conexion.confirmarTransaccion(cn);
            }else{
                Conexion.anularTransaccion(cn);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return rpta;
    }
     
     public List<TemaSylabus> listaTemas(TemaSylabus beanInput) {
        List<TemaSylabus> lista = new ArrayList <TemaSylabus>();
        TemaSylabus bean = null;        
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "SELECT T.cod_tema, C.nombre, N.nombre, G.nombre,T.nombre_tema "
                + "FROM tema_silabus T "
                + "INNER JOIN nivel_grado NG ON NG.cod_nivelgrado = T.cod_nivel_grado "
                + "INNER JOIN grado G ON G.cod_grado = NG.cod_grado "
                + "INNER JOIN nivel N ON N.cod_nivel = NG.cod_nivel "
                + "INNER JOIN CURSO C ON C.cod_curso = T.cod_curso "
                + "WHERE T.cod_nivel_grado = ? AND T.cod_curso = ? ";
        try {
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, beanInput.getCodNivelGrado());
            ps.setInt(2, beanInput.getCodCurso());
            rs = ps.executeQuery();
            while (rs.next()) {
                bean = new TemaSylabus();
                bean.setCodTema(rs.getInt(1));
                bean.setNombreCurso(rs.getString(2));
                bean.setNombreNivel(rs.getString(3));
                bean.setNombreGrado(rs.getString(4));
                bean.setNombreTema(rs.getString(5));
                lista.add(bean);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        } catch (SQLException ex) {
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return lista;
    }
}
